package cn.lili.common.utils;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * ip工具
 *
 * @author Chopper
 */
@Slf4j
@Component
public class IpHelper {

	/**
	 * qq lbs 地区查询key
	 */
	@Value("${lili.lbs.key}")
	private String key;
	/**
	 * qq lbs 地区查询key
	 */
	@Value("${lili.lbs.sk}")
	private String sk;

	private static final String API = "https://apis.map.qq.com";

	/**
	 * 获取IP返回地理信息
	 *
	 * @param request
	 *            请求参数
	 * @return 城市信息
	 */
	public String getIpCity(HttpServletRequest request) {

		String url = "/ws/location/v1/ip?key=" + key + "&ip=" + IpUtils.getIpAddress(request);
		String sign = SecureUtil.md5(url + sk);
		url = API + url + "&sign=" + sign;
		String result = "未知";
		try {
			String json = HttpUtil.get(url, 3000);
			JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
			String status = jsonObject.get("status").getAsString();
			if ("0".equals(status)) {
				JsonObject address = jsonObject.get("result").getAsJsonObject().get("ad_info").getAsJsonObject();
				String nation = address.get("nation").getAsString();
				String province = address.get("province").getAsString();
				String city = address.get("city").getAsString();
				String district = address.get("district").getAsString();
				if (StrUtil.isNotBlank(nation) && StrUtil.isBlank(province)) {
					result = nation;
				} else {
					result = province;
					if (StrUtil.isNotBlank(city)) {
						result += " " + city;
					}
					if (StrUtil.isNotBlank(district)) {
						result += " " + district;
					}
				}
			}
		} catch (Exception e) {
			log.info("获取IP地理信息失败");
		}
		return result;
	}
}
